iT邦幫忙

2023 iThome 鐵人賽

DAY 5
1

Aspect-Oriented Programming

AOP(Aspect-Oriented Programming),是程式設計的模式,他讓我們將應用程式的關注點(concerns) 模組化並分離出來,增加程式的組織性、可維護性和可讀性。

先介紹來介紹AOP的概念 :

  • 切面 (Aspect) : 它定義了在何處和何時應該應用這些關注點。切面通常包括通知和切點。
  • 通知 (advice) : 通知是在切面中定義的一組操作,它們表示在特定的切點執行哪些行為。主要的通知類型包括前置通知、後置通知、環繞通知、異常通知和最終通知。
  • 切點 (Pointcut) :切點是一個表達式,它定義了在應用程序的哪些地方應該應用通知。切點通常使用通配符或正則表達式來匹配方法或類。
  • 連接點 (Join Point) : 連接點是在應用程序執行過程中可以應用通知的具體位置,例如方法調用或例外拋出。

在Spring裡我們可以以 @Aspect 定義一個切面:

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class SampleAspect {

    @Pointcut("execution(* com.example..*(..))")
    private void anyMethod() {}

    @Before("anyMethod()")
    public void beforeAdvice() {
        System.out.println("前置通知");
    }

    @AfterReturning(pointcut = "anyMethod()", returning = "result")
    public void afterReturningAdvice() {
        System.out.println("後置通知" + returning);
    }

    @After("anyMethod()")
    public void afterAdvice() {
        System.out.println("最終通知");
    }
}
  • @Pointcut 定義切點,目標com.example底下的所有方法。
  • @before 定義前置通知,在目標方法執行前執行。
  • @AfterReturning 定義後置通知,在目標方法正常執行完畢後執行。
  • @After 定義最終通知,無論目標方法是否正常執行完畢,都會執行。

在這些註釋後,括號中方法就是連接點 。

最後將切面配置到Spring應用程序中,讓Spring容器知道它應該在哪些地方應用切面。

spring:
  aop:
    auto: true 
  application:
    name: SpringBootApp

logging:
  level:
    com.example.SampleAspect: DEBUG # 設置切面的日誌級別為DEBUG

這樣Spring自動將切點創建AOP代理咯~

我們未來在設計程式時,就可以將日誌記錄、事務管理、安全性、性能測試等關注點從主要的應用程序代碼中分離出來!!讓程式更容易管理與組織!!

資料來源

https://docs.spring.io/spring-framework/reference/core/aop/introduction-defn.html
https://en.wikipedia.org/wiki/Aspect-oriented_programming


上一篇
Day 4 : 依賴注入?到底是誰注入誰!?
下一篇
Day 6 : Bean,是春天裡的豆豆先生!
系列文
Spring、Spirng MVC 及 Spring Boot 自主學習旅途!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言